Technical Note TN2031
Java Runtime Properties for Mac OS X

目次

このテクニカルノートは、Mac OS X上で動作するJavaアプリケーションに渡せるMacintosh固有のランタイム属性について説明します。これらのランタイム属性は、必要な情報をパッケージ化された'.app' Javaアプリケーションラッパに提供する、JavaアプリケーションをよりMacライクにするなど、それぞれで機能が異なります。アプリケーションにランタイム属性を指定する様々な方法についても説明します。

このテクニカルノートにおける情報は、Mac OS X 10.1.3以降、Java 1.3.1 Update 1、December 2002 Developer Toolsに含まれているProject BuilderやMRJAppBuilderにおけるJava開発に適用できます。

[2002年5月23日]






Mac OS X向けのJavaアプリケーションの属性

Mac OS X上のJavaアプリケーションには、ユーザ体験を向上させるためにいくつかの専用のランタイム属性を追加することができます。これらの属性は、コマンドラインで指定したり、パッケージ化された'.app' Javaアプリケーションの場合は通常、MRJApp.propertiesInfo.plistのどちらかのファイルで指定したりできます。

ランタイム属性については、下記表で説明します。表の 「デフォルト」 の列には、アプリケーションをパッケージ化するときに値を指定していない場合のランタイム属性のデフォルト値を示します。属性は、「必須」、「グラフィクス」、「Macintosh」属性の3つの種類に大きく分けられます。

先頭に戻る

必須アプリケーション属性

表1に示す属性は、'.app' Javaアプリケーションが正しく起動するために必要な、正しく定義されていなくてはならない属性です。これらの属性は、アプリケーションのメインクラスを把握するため、またアプリケーションが必要とするすべてのライブラリの位置を把握するために必要です。これらの属性がない場合、または正しい値で定義されていない場合には、Javaランタイムは、起動時に多くのエラーを発行することになります。

アプリケーションをProject Builderで作成すると、これらの属性は自動的に定義されます。Project Builderを使用しない場合は、これらの属性を定義しなければなりません。(定義方法については“アプリケーション属性の設定”をご覧下さい。)これらの属性は、Terminalからjavaコマンドを使ってアプリケーションを起動する場合は不要です。

表1 「必須」アプリケーション属性

属性

デフォルト

機能

com.apple.mrj.application.main なし

アプリケーションのmain()メソッドを含むクラスの完全限定名を指定します。

com.apple.mrj.application.classpath なし

必要なすべてのコードベースへのファイルシステムパス(ディレクトリ、JARファイル)を指定します。


註:
Project Builderにおけるは属性については表5をご覧下さい。

先頭に戻る

アプリケーション起動属性

表2に示す属性は、伝統的なコマンドライン起動属性を、Mac OS XのJavaアプリケーションでも適応できるようにしています。

表2 Mac OS XのJava起動属性

属性

デフォルト

機能

com.apple.mrj.application.parameters なし

mainに渡されるString[]を生成するためのスペース区切りのパラメータリスト。

com.apple.mrj.application.workingdirectory なし

アプリケーションのワーキングディレクトリ。

com.apple.mrj.application.vm.options なし

スペース区切りの仮想メモリオプション。(例:-Xms2m


註:
Project Builderにおけるは属性については表5をご覧下さい。

先頭に戻る

グラフィックスアプリケーション属性

ハードウェアアクセラレーションについて: Swingおよび2Dグラフィックスのハードウェアアクセラレーションはプレリリースの状態にあります。Java 1.3.1 Update 1では属性も変更されました。ハードウェアアクセラレーションを利用する場合は1.3.1 Update 1 Release Notesを参照して下さい。

先頭に戻る

“Macintosh”アプリケーション属性

表4に示す属性は、JavaアプリケーションをAquaユーザインターフェイスにより近づけるために使用できます。これらの属性はすべて省略可能であり、新たにコードを追加しなくても、アプリケーションのMacライクなルック&フィールやほかの一般的なルック&フィールによる見栄えを向上させることができます。

表4 Mac OS X向けJava Macintosh属性

属性

デフォルト

機能

com.apple.macos.useScreenMenuBar * false

Aquaのルック&フィールを使っている場合に、SwingメニューをMac OSメニューバーに入れます。Project Builderで作成されたJavaアプリケーションはこの値がtrueに設定されます。

com.apple.macos.use-file-dialog-packages false

trueに設定されている場合は、java.awt.FileDialogで、アプリケーションバンドル(.app)やインストーラパッケージ(.pkg)を単一ファイルのように選択することが可能になります。それらを開いて中を見ることはできません。JFileChooserの設定についてはテクニカルノート2042をご覧下さい。

com.apple.macos.smallTabs * false

trueに設定されている場合は、タブは小さいフォントサイズで形成され、タブ全体の大きさが小さくなります。Aquaのユーザインターフェイスガイドラインではタブを2サイズ定義しています。

com.apple.mrj.application.apple.menu.about.name なし

定義されている場合は、“〜について”コマンドがアプリケーションメニューの最上部に追加され、 com.apple.mrj.AboutHandlerを登録することによりそのコマンドを検知できます。Project Builderで作成されたアプリケーションはこの値がプロジェクト名に設定されます。

com.apple.mrj.application.growbox.intrudes true

サイズ変更が可能なウィンドウのグローボックスが、AWT/Swingを使った領域を侵食できるようにします(この機能を無効にしている場合には、ウィンドウの底辺が15ピクセル分下に押し下げられます)。

com.apple.mrj.application.live-resize false

ウィンドウのサイズを中身を表示したまま変更できるようにします。


先頭に戻る

アプリケーション属性の設定

上記の表に示されている属性は、使用しているツールおよびアプリケーションの配備方法に応じて、コマンドラインの使用、.appパッケージの場合は、MRJApp.propertiesの使用、またはInfo.plistのファイルの使用、の3つのいずれかの方法で指定することができます。アプリケーションパッケージの詳細についてはInside Mac OS X: System Overviewをご覧下さい。

先頭に戻る

コマンドラインからの実行

Mac OS Xでは、標準のJDKコマンドラインツールが提供されています。したがってjava実行可能ファイルを使用してコマンドラインからアプリケーションを起動する時は、表1に示した2つの必須属性は不要です。追加的な、省略可能の属性は、プログラムの実行時に-Dフラグを使用することにより、コマンドラインで起動するJavaアプリケーションに対して指定できます。



duke% java -cp lib/MyJar.jar ¥
   -Dcom.apple.mrj.application.growbox.intrudes=false ¥
   -Dcom.apple.macos.useScreenMenuBar=true MySampleApp


-Xdockパラメータを使用すれば、コマンドラインから、Dockのアイコンと名称を設定することも可能です。



duke% java -cp lib/MyJar.jar -Xdock:name="My Groovy Java ¥
   App" -Xdock:icon=myhome/myIcon.icns MySampleApp


名称とアイコンパラメータは別々の-Xdock属性で指定しなければなりません。以前は一つの-Xdock属性で名称とアイコンをコロン(:)区切りで指定しましたが、名称にコロンが含まれていることがあるので、指定方法が変更されました。名称を指定しなかった場合は、アプリケーションのメインクラスがアプリケーションメニューのタイトルに表れます。アイコンを指定しなかった場合は、デフォルトのJavaアイコンがDockに表示されます。他のMac OS Xアプリケーションと同様、アイコンは有効な.icnsファイルでなければなりません。スペースを含む名称やファイル名は上記のように(“”)または ¥ エスケープ記号で設定します。名称やアイコンを複数指定した場合は、最初に指定ものが使われます。


先頭に戻る

Project Builderを使った'.app'の実行

Project Builderを使用してJavaアプリケーションを開発する場合は、Project Builderが、アプリケーション用にダブルクリックで起動できる'.app'実行可能ファイルを生成しパッケージ化する、また前述の属性を設定する際の多くの作業をデベロッパに代わって行ってくれます。

Project Builderでプロジェクトに名前を付けて開始すると、アプリケーションのメインクラスとクラスパスの属性が自動的に生成されます。特にクラスパスの属性は、プロジェクトから.classおよび.jarファイルの追加または削除を行うたびに更新されます。しかし、メインクラスの名前を変更した場合には、対応する属性を手作業で変更する必要があります。

Project Builderで、Javaアプリケーションをダブルクリックで実行できる'.app'ファイルにパッケージ化するときには、上記で示されているJavaのランタイム属性が、.appパケージ内に含まれているInfo.plistファイルに入れられます。このファイルは、アプリケーションの起動時に解析され、ランタイムに渡されます。

Info.plistファイルは、Mac OS Xアプリケーションでは標準で使われ、Project Builderにより プロジェクトの「アプリケーション設定」から生成されます(Project Builder 1.1では、「アプリケーション設定」にJavaの辞書が追加されています)。Project Builderのランタイム属性を設計時に追加、変更するには、次の手順で行います。

  1. 「プロジェクト」メニューから 「アクティブターゲットを編集」を選択します。
  2. 「アプリケーション設定」タブをクリックします。
  3. 「詳細設定」ボタンをクリックします。
  4. 「Java」の隣にある 三角形をクリックし、 Java属性のリストを広げます。

図1 は、Project Builder 1.1の属性ペインを示します。

Project Builder

図1 Project Builder 1.1以降Javaランタイム属性の編集

Project Builder 1.1以降、多く属性はディクショナリで設定できるようになりました。これらの属性と該当するディクショナリキーは表5にリストされています。

表5 Javaラインタイム属性のInfo.plist上の表記

属性

Project Builder 1.1
ディクショナリキー

記述型式

com.apple.mrj.application.main MainClass

元の属性と同様(文字列)

com.apple.mrj.application.classpath ClassPath

元の属性と同様(コロン区切りの文字列)または文字列の配列

com.apple.mrj.application.parameters Arguments

元の属性と同様(スペース区切りの文字列)または文字列の配列

com.apple.mrj.application.workingdirectory WorkingDirectory

元の属性と同様(文字列)

com.apple.mrj.application.vm.options VMOptions

元の属性と同様(スペース区切りの文字列)または文字列の配列

Info.plistファイルは更に以下のキーを提供しています。

  • Jar: アプリケーションjarファイルへのパス。コマンドラインでjava -jarと同様の働きをします。
  • $JAVAROOT: アプリケーションパッケージ内のJavaクラスへのパス。このキーが設定されていない場合、$JAVAROOTのデフォルト値は$APP_PACKAGE/Contents/Resources/Javaとなります。このキーを設定することで、JarClassPathArgumentsPropertiesWorkingDirectoryVMOptionsキーの文字列を短くすることができます。
  • $APP_PACKAGE: '.app'ファイルへのパス。$JAVAROOTと同様の使い方をします。'.app'パッケージ外のファイルを参照する時に使用します。

$JAVAROOTおよび$APP_PACKAGEはJavaのランチャーが代用するもので、Javaコード内は有効ではありません。Javaアプリケーション内では、標準的な方法でパス名を扱います。

上記に加えて、Project Builderを使用している場合は、com.apple.macos.useScreenMenuBartrueに、com.apple.mrj.application.apple.menu.about.nameがプロジェクト名に初期化されます。他の属性はすべて上記手順にて追加しなければなりません。

Project Builder で既にビルドされているアプリケーションのランタイム属性を編集するには、次の手順で行います。

  1. Controlキーを押したまま、アプリケーションのアイコンをクリックします。
  2. 「パッケージの内容を表示」を選択します。
  3. 「Contents」フォルダを開きます。
  4.  /Developer/Applicationsの下にあるPropertyListEditorか、テキストエディタを使って、Info.plistファイルを開きます。

Project Builder 10.0(Mac OS Xの最初のリリース時に出荷)では、「ファイル」タブで編集可能なMRJApp.propertiesファイルが作成されます。 MRJApp.propertiesはMac OS X 10.1でもランタイムで使用できますが、Project Builderは、Mac OS Xアプリケーションの規格により正しく準拠できるようにInfo.plistによる方式を採用しています。

Info.plistの詳細についてはInside Mac OS X: System Overviewをご覧下さい。

先頭に戻る

MRJAppBuilderを使った '.app' の実行

MRJAppBuilderユーティリティは、事前にビルドされているJavaアプリケーションを'.app'ファイルにパッケージ化しダブルクリックで起動できるようにするために使われます。現在Project Builderは使用していないが、他のMac OS Xアプリケーションと同じように起動できるJavaアプリケーションを作りたいデベロッパのために提供されます。MRJAppBuilderは/Developer/Applicationsにあります。

Project Builderとは違い、MRJAppBuilder 1.1は、Javaランタイム属性を格納するInfo.plistファイルを使用するようにはアップデートされておらず、依然ランタイム属性をMRJApp.propertiesファイルに格納します。MRJApp.propertiesファイルは、行ごとに1つの属性を含んでおり、プレーンテキストで記述されています。行の先頭に「#」を付けることにより、行をコメントアウトして実行時にその行を無視するようにできます。

Project Builder 1.1より前のバージョンで作成されたJavaプロジェクトも、Project Builder 1.1で開くことができ、「ファイル」ペインを使用すれば、MRJApp.propertiesの編集も可能です。MRJApp.propertiesを使って作成されたJavaアプリケーションのランタイム属性を編集するためには、次の手順で行います。

  1. Controlキーを押したまま、アプリケーションのアイコンをクリックします。
  2. 「パッケージの内容を表示」を選択します。
  3. 「Contents」フォルダを開きます。
  4. 「Resources」フォルダを開きます。
  5. テキストエディタでMRJApp.propertiesファイルを開きます。

MRJAppBuilderは、今後Info.plistをベースにした属性を使用するようにアップデートされる予定です。更にMRJApp.propertiesは次の制限があります。

  1. mainへのパラメータはスペース区切りとなっているため、各々のパラメータはスペースを含むことができません。(Info.plistは文字列の配列を使用するので、この制限はありません。)
  2. MRJApp.propertiesを使用したJavaアプリケーションパッケージがコマンドラインで実行された場合、追加パラメータは無視されます。
  3. com.apple.mrj.application.parametersでは$APP_PACKAGEを使用することができません。

先頭に戻る

要約

このテクニカルノートでは、JavaデベロッパがMac OS Xで自由に使える多くのランタイム属性、およびランタイム属性を使用するための3つの主な方法、コマンドライン、Info.plist、およびMRJApp.propertiesについて説明しました。これらの属性は、Project Builderを使用して、設計時に、または上記に記述した指示に従いビルド後に編集できます。

先頭に戻る